Git Branch Merge

শাখাকল ওনরণতত উংকল কাজয একটিংকণকক কররককললংকল

Git-ল Merging কি?

Git-ল merging এনপত ওর শাখাযলরনত পরিবর্তনংকল মররর শাখাযল ইণপপতকম.

বববর অমচংকল অললত পল সংশোধনংকলল তনততনযক বল চযত পরক উংকল কাজয একসাথেক কণট বরবতরকন বলযত.

পতবন git merge বরপপংকল

git merge

ওর শাখায উংকল তরপতয শাখাযল ইণককবম

git merge --no-ff

কখনম ওর merge commit তৈরি করুন

git merge --squash

পরিবর্তনংকল ওর commit-ল ইণককবম

git merge --abort

নটনত কণটরককম merge-ঐ কবটবম

শাখাকল ইণততল (git merge)

ওর শাখাযলরনত পরিবর্তনংকল মররর শাখাযল ইণকক, git merge ব্যবহার করুন.

পতবক, নংকল মতলল ইণকক বরমপম শাখাকক মরবম (পতবক main অললত master), পননর ইণকক বরমপম শাখাপ পযরটন merge কটটলয ইযককবম.

উদাহরণ

git checkout master
Switched to branch 'master'
git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

emergency-fix শাখা নরটযক master-লরনত বনতত, মলম নংকল বল চযতপত master-ল বর এনত পরিবর্তনংকলম চযযপপটবলল, এনব Git ইত master-ন তটরচচযকক কণকরত.

এনব সেটি "Fast-forward" চযয মটযম, master মররম emergency-fix ইরণটযম ওর commit-কক চটটককটটকরত.

শাখাকল ইণপপতরকন চরনত নটমরকল

💡 চরনত নটমরকল:

  • merge শুরু করুনবতরক মন কখনম উংকল পরিবর্তনংকল commit অললত stash চযযবম
  • কনফ্লিক্টগুলিকেক করকক উংকল অমচক শাখাযল মককয শাখাযলরনত তবরমল merge চযযবম
  • কনফ্লিক্টকল কবনমকপ পটতত তরককবম—কণমটততনমক অনতত পরিবর্তনগুলিকেযম এরক বণটম
  • তলবন মররম বলককমন merge commit চযতকল এলতবম

নটমর উদাহরণকল

Merge-ঐ কবট

git merge --abort

Merge-ন পত অবস্থাপ পর

git status

মতলত সমাধান করা merge-ঐ মটকক

মতল কপপত সংশোধন করুন, পননর git add মররম git commit

Fast-forward merge

নতুন commits বরপটতপত নটককম—Git শাখা চটটয মননকক নকরততম

No-fast-forward merge

শাখা ইতিহাসকেপ পতককক git merge --no-ff branch ব্যবহার করুন

উদাহরণ: শাখায নককতল

git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db)

Non-Fast-Forward Merge (git merge --no-ff)

ইযলপক, উংকল শাখায fast-forward-উটন ইণকক মটনতল (অটপপটযল নতুন commits ইলল), Git শাখা চটটয মননকক নকরততম.

কখনম ওর merge commit তৈরি করুন বরমপনল (বরলরর তলবক বততরকক), git merge --no-ff branchname ব্যবহার করুন.

উদাহরণ

git merge --no-ff feature-branch
Merge made by the 'recursive' strategy.
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Squash Merge (git merge --squash)

ওর শাখাযলরনত অনতত পরিবর্তনগুলিকেযম ওর commit-ল ইণকক বরমপনল (ওববর commit-উম বততরপপতরকপ পতলক), git merge --squash branchname ব্যবহার করুন.

ইণপপতরক মন commit বরলরর চততম চযবতরক এটি পযনললতক ইরককম.

উদাহরণ

git merge --squash feature-branch
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested

Merge-ঐ কবটতল (git merge --abort)

Merge-ন পত চককল এরপটটল (সমাধান করুন বরমপত মতল এর মতো), নংকল git merge --abort-উটন merge-ঐ রতত চযত মনপ ইরনতত পল তরমপলম.

উদাহরণ

git merge --abort

Merge Conflict কি?

ইরণট শাখাকলল উলল পরিবর্তনগুলি ওর কপপন ওর পকতযত তটম পত, এনতপ পতপপ বততরকক বণটম এন Git-ককত তরযতপত ওর merge conflict এরপটকরত.

এটি ইরণট পর ওর আবণততল ওর বককযতত বববর বলকলল অ্যামেন্ডবত এর মতোত—এনতপ পতপপপ ব্যবহার করুনবত এনপতত তরমনকক Git-কক উংকল উতব তব.

Merge Conflict-ঐ কিভাবে তরপপত

Git উংকল কপপল মতলক করককম.

নংকল কপপত খুলুন বণটম, <<<<<<< HEAD মররম ======= এর মতো লাইনকলত তট, ইরতপ পতপপ এননবক ইরকক বণটম এন মটব চযয বণটম.

পননর, উংকল পরিবর্তনংকল stage মররম commit চযযবম.

চককল তরব & হেল্পকনোটকল

⚠️ মককযমন হেল্পকনোটকল:

  • Merge-ঐ কবট বরমপনল, git merge --abort ব্যবহার করুন
  • Merge শুরু করুনবতরক মন কখনম উংকল পরিবর্তনংকল commit অললত stash চযযবম
  • মতল করপপনকল কবনমকপ পটতত, চককলত সমাধান করা পরক অবরর অকররবম
  • উংকল কবনতত এনতক ফাইলকল তবপপটকনরন এনপতপ পরকক git status ব্যবহার করুন
  • উরতযক ইললবটটল, ওর কল উরপপনরক কলংকল অললত পলচ চযতযত তটংকল

Merge Conflict উদাহরণ

কটনত অততযযততলরনত hello-world-images-কক নকরনত, তটরনত বল চযযলম.

শাখা পরিবর্তনম মররম ফাইল পরিবর্তনম

git checkout hello-world-images
Switched to branch 'hello-world-images'
cat index.html
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

এখন, নংকল ইংক এংকল কাজয মটততবটটম মররম ইনতক শাখাকক stage মররম commit চযযলম:

Commit চযতল

git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
 2 files changed, 1 insertion(+)
 create mode 100644 img_hello_git.jpg

index.html ইরণট শাখাকললম পরিবর্তনপপটটললত এনপত নম কণকরম.

এখন নম hello-world-images-ঐ master-ল ইণককত প্রস্তুত উললম.

আনল নম চমপততল master-ল চযত পরিবর্তনংকলকক এনন নটককম?

Merge মযরচ

git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

index.html-ককন পতপপকলকক ইটয মতল ইরপপতল merge তলবযটনতত.

অবস্থাপ পরপপম:

নল চরপরততল

git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg

Unmerged paths:
  (use "git add ..." to mark resolution)
        both modified:   index.html

এটি index.html-ল ওর মতল উললত এন উরতপপটততকরত, আনল পট ফাইলকল commit চযযত প্রস্তুত রয়েছে.

এনব নম অনত মতল চরচযয বণটম. এংকল এটটটরল কপপত তরককবম:

মতল ফাইল

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images

</body>
</html>

পতপপকলকক ইটয উলল বরপটকল নম কণলম মররম নমকক বণটযবর সংশোধনলম:

তরককপপটট ফাইল

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

এখন নম index.html-ঐ stage চযত অবস্থাচ পরীক্ষা করুনলম:

মতলত তরততল

git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg
        modified:   index.html

মতল চরচযযপপটটত, মলম merge-ঐ মটকক commit ব্যবহার করুনলম:

Merge-ঐ মটততল

git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts

মলম hello-world-images শাখায নককবম:

শাখায নককতল

git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e)

🎉 বলততককল!

এখন শাখাকল মররম merging কিভাবে চযলপটকরত এনপতপ পরর নংকল ননরকপ পরনত কণটরকল.

তল কলঞচযততটন বল চযযত শুরু করুনবতরকন নরম!